/**
 * 存储管理器主模块
 * 整合不同类型的存储服务，提供统一的接口
 */
import {LogCategory, logger} from '../logger';
// 导入各个存储服务
import {SettingsService} from './services/SettingsService';
import {BookmarksService} from './services/BookmarksService';
import {HistoryService} from './services/HistoryService';
import {SessionService} from './services/SessionService';
import Store from 'electron-store';

export * from './types';

/**
 * 存储管理器类
 * 统一管理所有存储服务
 */
class StoreManager {
  private static instance: StoreManager;

  // 各个存储服务
  public settings: SettingsService;
  public bookmarks: BookmarksService;
  public history: HistoryService;
  public session: SessionService;

  // 旧版本store引用，仅用于保持向后兼容
  private legacyStore: Store<any>;

  /**
   * 私有构造函数
   */
  private constructor() {
    // 初始化各个存储服务
    this.settings = SettingsService.getInstance();
    this.bookmarks = BookmarksService.getInstance();
    this.history = HistoryService.getInstance();
    this.session = SessionService.getInstance();

    // 创建一个整合的store用于向后兼容
    this.legacyStore = this.createLegacyStore();

    logger.info('StoreManager', LogCategory.SYSTEM, '存储管理器初始化完成');
  }

  /**
   * 获取StoreManager单例实例
   */
  public static getInstance(): StoreManager {
    if (!StoreManager.instance) {
      StoreManager.instance = new StoreManager();
    }
    return StoreManager.instance;
  }

  /**
   * 创建用于向后兼容的统一存储
   * 仅用于支持旧版代码，新代码应该使用专门的服务
   */
  private createLegacyStore(): Store<any> {
    // 使用settings服务的store作为基础
    const store = this.settings.getStore();

    // 注意：这只是一个简单的包装，实际上不会整合所有数据
    // 用于逐步过渡到新的存储架构
    logger.warn('StoreManager', LogCategory.SYSTEM, '使用了向后兼容的存储访问方式，应当尽快迁移到专门的存储服务');

    return store;
  }

  /**
   * 获取原始store实例，用于向后兼容
   * @deprecated 请使用专门的存储服务
   */
  public getStore(): Store<any> {
    logger.warn('StoreManager', LogCategory.SYSTEM, '使用了已弃用的getStore()方法，请迁移到专门的存储服务');
    return this.legacyStore;
  }

  /**
   * 清理所有存储数据
   * 应用程序退出前调用
   */
  public cleanupStore(): void {
    logger.info('StoreManager', LogCategory.SYSTEM, '开始清理所有存储数据');

    try {
      // 获取设置，检查是否需要清理数据
      const settings = this.settings.getSettings();

      // 清理会话数据
      this.session.cleanupStore();

      // 根据隐私设置决定是否清理历史记录
      if (settings.privacy.clearDataOnExit) {
        logger.info('StoreManager', LogCategory.SYSTEM, '根据隐私设置清理浏览数据');
        this.history.clearHistory();
      } else {
        // 仅清理旧历史记录
        this.history.cleanupStore();
      }

      // 书签数据通常不需要清理
      this.bookmarks.cleanupStore();

      // 设置数据通常不需要清理
      this.settings.cleanupStore();

      logger.info('StoreManager', LogCategory.SYSTEM, '所有存储数据清理完成');
    } catch (error) {
      logger.error('StoreManager', LogCategory.SYSTEM, '清理存储数据时发生错误', error);
    }
  }
}

// 创建并导出StoreManager实例
export const storeManager = StoreManager.getInstance();

// 导出原始store对象以保持向后兼容性
export default storeManager.getStore();
